package common.facebook;

import java.io.IOException;

import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.nio.ByteBuffer;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import javax.net.ssl.HttpsURLConnection;

import common.net.HTTPRequest;
import common.util.Util;

import play.Logger;
import sun.net.www.content.text.PlainTextInputStream;

import net.sf.json.JSONObject;

/**
 * <pre>
 * 페이스북 연동과 관련된 기능을 담은 클래스
 * 2012.05.11 : 신규작성 (박상헌)
 * </pre>
 * @author 박상헌
 *
 */
public class FBConnect {
	
	/**
	 * <pre>
	 * 페이스북 로그인 요청을 통해 받은 code값으로 access_token을 얻는다.
	 * </pre>
	 * @param code
	 * @return
	 */
	public static Map<String, String> getAccessToken(String code) {
		Logger.debug("Get AccessToken");
		Map<String, String> result = null;
		
		String appId = FBConstants.APP_ID;
		String appSecret = FBConstants.APP_SECRET;
		
		try {
			URLEncoder.encode("", "UTF-8");
			
			Map<String, String> params = new HashMap<String, String>();
			params.put("client_id", appId);
			params.put("redirect_uri", "http://localhost:9000/facebook/redirect");
			params.put("client_secret", appSecret);
			params.put("code", code);
			
			byte[] readData = HTTPRequest.getResponse(FBConstants.FB_URL_ACCESS_TOKEN, params);
			
			String data = new String(readData, "UTF-8");
			Logger.debug("Read Data : " + data);
			
			result = Util.parseQueryString(data);
			Logger.debug("Result : " + result.toString());
		} catch (UnsupportedEncodingException e) {
			Logger.error(e.getMessage());
		} // try
		
		return result;
	} // getAccessToken()
	
	
	/**
	 * <pre>
	 * OAuth Token을 이용해서 페이스북 사용자 정보를 가져온다.
	 * 2012.05.14 : 신규작성 (박상헌)
	 * </pre>
	 * @param accessToken
	 * @return
	 */
	public static Map<String, ?> me(String accessToken) {
		JSONObject object = null;
		Map<String, String> params = new HashMap<String, String>();
		params.put("access_token", accessToken);
		
		byte[] readData = HTTPRequest.getResponse(FBConstants.FB_URL_ME, params);
		
		try {
			String data = new String(readData, "UTF-8");
			Logger.debug("ME Data : " + data);
			object = JSONObject.fromObject(data);
			Iterator<String> iter = object.keySet().iterator();
		} catch (UnsupportedEncodingException e) {
			Logger.error(e.getMessage());
		} // try
		
		return object;
	} // me()
	
	/**
	 * <pre>
	 * Facebook id 에 해당하는 사용자의 사진을 가져온다.
	 * 2012.05.14 : 신규작성 (박상헌)
	 * </pre>
	 * @param facebook_id
	 * @return
	 */
	public static byte[] userPicture(String facebook_id) {
		byte[] readData = null;
		
		String requestURL = FBConstants.FB_URL + "/" + facebook_id + "/picture";
		readData = HTTPRequest.getResponse(requestURL, null);
		
		return readData;
	} // userPicture
} // class FBConnect
